﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using App_Persistencia;

namespace App_Negocio
{
    public class Cliente
    {
        private int clienteId;

        public int ClienteId
        {
            get { return clienteId; }
            set { clienteId = value; }
        }

        private string nomCliente;

        public string NomCliente
        {
            get { return nomCliente; }
            set { nomCliente = value; }
        }

        private string apeCliente;

        public string ApeCliente
        {
            get { return apeCliente; }
            set { apeCliente = value; }
        }

        private string calleDirCliente;

        public string CalleDirCliente
        {
            get { return calleDirCliente; }
            set { calleDirCliente = value; }
        }
        private int nroDirCliente;

        public int NroDirCliente
        {
            get { return nroDirCliente; }
            set { nroDirCliente = value; }
        }
        private int pisoDirCliente;

        public int PisoDirCliente
        {
            get { return pisoDirCliente; }
            set { pisoDirCliente = value; }
        }
        private string deptoDirCliente;

        public string DeptoDirCliente
        {
            get { return deptoDirCliente; }
            set { deptoDirCliente = value; }
        }

        private string email;

        public string Email
        {
            get { return email; }
            set { email = value; }
        }
        private string stringtelCliente;

        public string StringtelCliente
        {
            get { return stringtelCliente; }
            set { stringtelCliente = value; }
        }

        private int telCliente;

        public int TelCliente
        {
            get { return telCliente; }
            set { telCliente = value; }
        }

        private string sexo;

        public string Sexo
        {
            get { return sexo; }
            set { sexo = value; }
        }

        private Tipo_Documento docTipo;

        public Tipo_Documento DocTipo
        {
            get { return docTipo; }
            set { docTipo = value; }
        }

        private int nroDocCliente;

        public int NroDocCliente
        {
            get { return nroDocCliente; }
            set { nroDocCliente = value; }
        }

        private Barrio bar;

        public Barrio Bar
        {
            get { return bar; }
            set { bar = value; }
        }

        private DateTime fechaCreacion;

        public DateTime FechaCreacion
        {
            get { return fechaCreacion; }
            set { fechaCreacion = value; }
        }

        private Usuario usuario;

        public Usuario Usuario
        {
            get { return usuario; }
            set { usuario = value; }
        }

        public DataView misEventosYMenu()
        {
            Cliente_Data cli = new Cliente_Data();
            cli.ClienteId = this.clienteId;
            DataView dataView = cli.misEventosYMenu();

            return dataView;
        }

        public DataTable listarPresupuestosConfirmados_Tabla()
        {
            DataTable tabla = new DataTable();
            Cliente_Data cli = new Cliente_Data();
            cli.ClienteId = this.clienteId;
            tabla = cli.listarPresupuestosCliente(2);//Enviados al cliente
            return tabla;
        }

        public List<Presupuesto> listarPresupuestos_Lista()
        {
            List<Presupuesto> lista = new List<Presupuesto>();
            DataTable presupuestosTabla = listarPresupuestosConfirmados_Tabla();
            Presupuesto presu = null;
            foreach (DataRow dr in presupuestosTabla.Rows)
            {
                presu = new Presupuesto();
                presu.Cliente = new Cliente();
                presu.Id = int.Parse(dr["Nro"].ToString());
                presu.FechaCreacion = DateTime.Parse(dr["Fecha"].ToString());
                presu.Cliente.NomCliente = dr["Nombre"].ToString();
                presu.Cliente.ApeCliente = dr["Apellido"].ToString();
                presu.Cliente.Email = dr["Email"].ToString();
                presu.CantPersonas = int.Parse(dr["CantPersonas"].ToString());
                presu.Comentario = dr["Observacion"].ToString();
                lista.Add(presu);
            }
            return lista;
        }

        public DataTable listarEventos_Tabla()
        {
            DataTable tabla = new DataTable();
            Cliente_Data cli = new Cliente_Data();
            cli.ClienteId = this.clienteId;
            tabla = cli.listaEventosCliente();
            return tabla;
        }

        public List<Evento> listarEventos_Lista()
        {
            List<Evento> lista = new List<Evento>();
            DataTable eventosTabla = listarEventos_Tabla();
            Evento evento = new Evento();
            evento.Cliente = new Cliente();
            foreach (DataRow dr in eventosTabla.Rows)
            {
                evento = new Evento();
                evento.Cliente = new Cliente();
                evento.Id = int.Parse(dr["Nro"].ToString());
                evento.CantPersonas = int.Parse(dr["CantPersonas"].ToString());
                evento.FechaEvento = DateTime.Parse(dr["FechaEvento"].ToString());
                evento.Comentario = dr["Comentario"].ToString();
                evento.Cliente.NomCliente = dr["ClienteNombre"].ToString();
                evento.Cliente.ApeCliente = dr["ClienteApellido"].ToString();
                lista.Add(evento);
            }
            return lista;
        }


        public void CargarCliente()
        {
            Cliente_Data cli = new Cliente_Data();
            cli.Usuario = new Usuario_Data();

            cli.Usuario.NomUsuario = Usuario.NomUsuario;
            cli.Usuario.Password = Usuario.Password;

            cli.NomCliente = nomCliente;
            cli.ApeCliente = apeCliente;
            cli.FechaCreacion = DateTime.Now;
            cli.TelCliente = telCliente;
            cli.Email = email;


            try
            {
                //Cargo al nuevo usuario invocando a la funcion de la clase Usuario_Data
                cli.CargarCliente();
                clienteId = cli.ClienteId;
            }
            catch (Exception ex)
            {
                throw new Exception("El usuario ya existe" + ex.Message);
            }
        }

        public void updateCliente()
        {
            Cliente_Data cli = new Cliente_Data();
            cli.NomCliente = this.nomCliente;
            cli.ApeCliente = this.apeCliente;
            cli.Bar = new Barrio_Data();
            cli.Bar.Id = this.Bar.Id;
            cli.CalleDirCliente = this.CalleDirCliente;
            cli.NroDirCliente = this.NroDirCliente;
            cli.PisoDirCliente = this.PisoDirCliente;
            cli.DeptoDirCliente = this.DeptoDirCliente;
            cli.Email = this.Email;
            cli.TelCliente = this.TelCliente;
            cli.NroDocCliente = this.NroDocCliente;
            cli.TipoDocCliente = new Tipo_Docmento_Data();
            cli.TipoDocCliente.Id = this.DocTipo.Id;
            cli.Sexo = this.Sexo;
            cli.ClienteId = this.ClienteId;
            try
            {
                cli.updateCliente();
            }
            catch (Exception e)
            {
                throw new Exception("El Cliente no existe" + e.Message);
            }
        }
    }
}
